# 构建阶段：使用golang基础镜像编译Go应用程序
# 参数:
#   PKGNAME - 指定包路径，用于确定构建目录位置
FROM harbor.linkfog.cn/library/golang:1.25.4 AS builder

# 设置构建时参数，指定包路径
ARG PKGNAME=""

# 配置Go模块代理，提高依赖下载速度
ENV GOPROXY=https://goproxy.io,direct

# 将当前目录所有文件复制到容器/build目录中
COPY . /build

# 设置工作目录为/build
WORKDIR /build/

# 整理并下载项目依赖
RUN go mod tidy

# 切换到指定包路径目录进行构建
WORKDIR /build/${PKGNAME}

# 编译Go程序，禁用CGO以确保静态链接，输出到/build/go-binary
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o /build/go-binary 


# 最终运行阶段：使用alpine基础镜像构建最小运行环境
# 参数:
#   PKGNAME - 包路径参数（用于复制配置文件）
FROM harbor.linkfog.cn/library/alpine:3.21 AS final

# 设置构建时参数
ARG PKGNAME=""

# 配置阿里云镜像源并安装时区数据，设置上海时区
RUN sed -i 's|dl-cdn.alpinelinux.org|mirrors.aliyun.com|g' /etc/apk/repositories \
    && apk update \
    && apk add --no-cache tzdata ca-certificates \
    && echo "Asia/Shanghai" > /etc/timezone \
    && mkdir -p /app/etc

# 设置环境变量时区为上海
ENV TZ=Asia/Shanghai

# 设置工作目录为/app
WORKDIR /app

# 从构建阶段复制编译好的二进制文件和相关资源
COPY --from=builder /build/go-binary /app/go-binary

# 复制配置文件目录（如果存在）
COPY --from=builder /build/${PKGNAME}/etc /app/etc

# 容器启动时执行编译好的Go二进制程序
CMD ["./go-binary", "-f", "etc/config.yaml"]